package com.cwt_taxi_xa.protocol.socket;

import com.cwt_taxi_xa.util.AppLog;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

public class DispatchCenterClientHandler extends SimpleChannelHandler {

	private static final String TAG = "DispatchCenterClientHandler";

	IChannelHandlerListener channelHandlerListener;

	public DispatchCenterClientHandler(IChannelHandlerListener channelHandlerListener) {
		this.channelHandlerListener = channelHandlerListener;
	}

	/**
	 * 当本地客户机已经成功的与远程主机建立连接（connected）时，连接断开的时候才会触发channelDisconnected事件
	 */
	@Override
	public void channelDisconnected(ChannelHandlerContext ctx,
									ChannelStateEvent e) throws Exception {
		// TODO Auto-generated method stub
		super.channelDisconnected(ctx, e);
		if(this.channelHandlerListener != null){
			this.channelHandlerListener.channelDisconnected(ctx);
		}
	}

	@Override
	public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
			throws Exception {
		// TODO Auto-generated method stub
		super.channelConnected(ctx, e);
		AppLog.i( "【通讯平台】Client: 连接调度中心成功！");
		if(this.channelHandlerListener != null){
			this.channelHandlerListener.channelConnected(ctx);
		}
	}

	/**
	 * 由一个接收了客户端传送数据的MessageEvent事件调用
	 */
	@Override
	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
			throws Exception {
		if(this.channelHandlerListener != null){
			this.channelHandlerListener.messageReceived(ctx,e);
		}
	}

	/**
	 * 事件处理方法由一个ExceptionEvent异常事件调用，这个异常事件起因于Netty的I/O异常
	 * 或一个处理器实现的内部异常。多数情况下，捕捉到的异常应当被记录下来，并在这个方法中
	 * 关闭这个channel通道。当然处理这种异常情况的方法实现可能因你的实际需求而有所不同，
	 * 例如，在关闭这个连接之前你可能会发送一个包含了错误码的响应消息。
	 */
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
			throws Exception {
		if(this.channelHandlerListener != null){
			this.channelHandlerListener.exceptionCaught(ctx);
		}
	}
}